#ifndef _TCP_CLIENT_H
#define _TCP_CLIENT_H

#include <stdint.h>
#include <stdbool.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "freertos/semphr.h"
#include "lwip/sockets.h"
#include <freertos/timers.h>

// 可配置参数 (可通过API修改)
typedef struct {
    uint32_t heartbeat_interval_ms;  // 心跳间隔时间
    uint16_t send_queue_size;         // 发送队列大小
    uint16_t recv_buffer_size;        // 接收缓冲区大小
    uint32_t send_timeout_ms;         // 发送超时时间
    uint32_t reconnect_interval_ms;   // 重连间隔时间
} TcpClientConfig;

// TCP连接状态
typedef enum {
    TCP_STATE_DISCONNECTED,   // 未连接
    TCP_STATE_CONNECTING,     // 连接中
    TCP_STATE_CONNECTED,      // 已连接
    TCP_STATE_FAILED          // 连接失败
} TcpConnectionState;

// 数据包结构
typedef struct {
    uint8_t *data;    // 数据指针
    size_t length;    // 数据长度
    bool is_dma;      // 是否为DMA缓冲区
} TcpPacket;

// 初始化TCP客户端
void tcp_client_init(const TcpClientConfig *config);

// 启动TCP客户端任务
void tcp_client_start(const char *server_ip, int server_port);

// 停止TCP客户端任务
void tcp_client_stop(void);

// 发送数据到服务器
bool tcp_send_data(const uint8_t *data, size_t len, TickType_t timeout);

// 获取TCP连接状态
TcpConnectionState tcp_get_connection_state(void);

// 发送答题结果给server
int send_answer_result(int question_number, int result_flag);
void process_question_result(void);

// 更新客户端配置
void tcp_client_update_config(const TcpClientConfig *new_config);

#endif // TCP_CLIENT_H